Mobility, Latent Trend and Omega for all states

  1. Mobility trend for all states (\(\phi\)). Covariate that describes human mobility. These data come from Unacast. We smooth the raw data from Unacast using a spline fit, resulting in the trajectories of human movement shown below. This covariate is used to reduce baseline transmission. Here we show the mobility trends from all 50 states. b) latent trend for all states (\(\psi\)). c) Relativie transmissibility (\(\omega\)) for all states. In each subplot, the read line is a non-weighted mean of all states.

Correlation between Omega and Prevalence

Sample period = March 1, 2020 through December 31, 2021

  1. predictor = omega(t); response = daily prevalence(t)


California, and mean across states, at varying lags


  1. predictor = AUC of omega over time; response = cumulative all infections over time


  1. predictor = AUC of omega; response = cumulative all infections


  1. map of same (correlation, by state)

To be made

Correlation between Mobility and Omega

LS0tCnRpdGxlOiAiRmlndXJlcyIKb3V0cHV0OiBodG1sX25vdGVib29rCmF1dGhvcjogRXJpYyBNYXJ0eQotLS0KCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGluY2x1ZGU9VFJVRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgb3V0LndpZHRoID0gIjEwMCUiKQpsaWJyYXJ5KGhlcmUpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGNvd3Bsb3QpCmxpYnJhcnkoeWFyZHN0aWNrKQojIGxpYnJhcnkoZ2dwdWJyKQpsaWJyYXJ5KGdnc3RhdHNwbG90KQpgYGAKCmBgYHtyIGRhdGF9CmFsbF9maWxlcyA8LSBsaXN0LmZpbGVzKHBhdGggPSBoZXJlOjpoZXJlKCJvdXRwdXQvY3VycmVudC8iKSwgcGF0dGVybiA9ICIuY3N2IikKcGFyYW1fZmlsZXMgPC0gbGlzdC5maWxlcyhwYXRoID0gaGVyZTo6aGVyZSgib3V0cHV0L2N1cnJlbnQvIiksIHBhdHRlcm4gPSAicGFyYW1zLW5hdHVyYWwucmRzIikKc3RhdGVfc3VtbWFyaWVzIDwtIHRpYmJsZSgpCnN0YXRlX3BhcmFtZXRlcnMgPC0gdGliYmxlKCkKc3RhdGVfbG9nbGlrcyA8LSB0aWJibGUoKQpzdGF0ZWRmIDwtcmVhZFJEUyhoZXJlOjpoZXJlKCJvdXRwdXQvY3VycmVudCIsICJzdGF0ZWRmLnJkcyIpKQpmb3IoaSBpbiAxOmxlbmd0aChhbGxfZmlsZXMpKSB7CiAgZG9fZmlsZSA8LSBhbGxfZmlsZXNbaV0KICBsb2NhdGlvbiA8LSBzdWIoIi5jc3YiLCAiIiwgZG9fZmlsZSkKICBzdGF0ZV9tZXRhZGF0YSA8LSBzdGF0ZWRmICU+JSBmaWx0ZXIoc3RhdGVfZnVsbCA9PSBzdWIoIi5jc3YiLCAiIiwgZG9fZmlsZSkpCiAgc3RhdGVfcG9wIDwtIHN0YXRlX21ldGFkYXRhICU+JSBwdWxsKHRvdGFsX3BvcCkKICBzdGF0ZV9pbml0UjAgPC0gc3RhdGVfbWV0YWRhdGEgJT4lIHB1bGwoaW5pdFIwKQogIHN0YXRlX2JldGFfcyA8LSAoc3RhdGVfaW5pdFIwKi4xKQogIAogIAogIHRtcGZpbGUgPC0gaGVyZTo6aGVyZSgib3V0cHV0L2N1cnJlbnQiLCBkb19maWxlKQogIHRtcCA8LSByZWFkLmNzdih0bXBmaWxlKSAlPiUKICAgIGZpbHRlcihzaW1fdHlwZSA9PSAic3RhdHVzX3F1byIgfCBpcy5uYShzaW1fdHlwZSksCiAgICAgICAgICAgdmFyaWFibGUgJWluJSBjKCJkYWlseV9jYXNlcyIsICJkYWlseV9kZWF0aHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiYWN0dWFsX2RhaWx5X2Nhc2VzIiwgImFjdHVhbF9kYWlseV9kZWF0aHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibW9iaWxpdHlfdHJlbmQiLCAibGF0ZW50X3RyZW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMiLCAiZGFpbHlfYWxsX2luZmVjdGlvbnMiKSkgJT4lCiAgICBtdXRhdGUoZGF0ZSA9IGFzLkRhdGUoZGF0ZSkpICU+JQogICAgZHBseXI6OnNlbGVjdChsb2NhdGlvbiwgc2ltX3R5cGUsIHBlcmlvZCwgZGF0ZSwgdmFyaWFibGUsIG1lYW5fdmFsdWUpICU+JSAKICAgIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSB2YXJpYWJsZSwgdmFsdWVzX2Zyb20gPSBtZWFuX3ZhbHVlKSAlPiUKICAgIG11dGF0ZShiZXRhX3MgPSBzdGF0ZV9iZXRhX3MpICU+JSAKICAgIG11dGF0ZShwcmV2YWxlbmNlID0gZGFpbHlfYWxsX2luZmVjdGlvbnMgLyBzdGF0ZV9wb3ApICU+JSAKICAgIG11dGF0ZShvbWVnYSA9IG1vYmlsaXR5X3RyZW5kICogbGF0ZW50X3RyZW5kICogYmV0YV9zKSAlPiUgCiAgICBwaXZvdF9sb25nZXIoY29scyA9ICFjKGxvY2F0aW9uLCBzaW1fdHlwZSwgcGVyaW9kLCBkYXRlKSwgCiAgICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAidmFyaWFibGUiLCAKICAgICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAibWVhbl92YWx1ZSIsCiAgICAgICAgICAgICAgICAgdmFsdWVzX2Ryb3BfbmEgPSBUUlVFKQoKICBzdGF0ZV9zdW1tYXJpZXMgPC0gYmluZF9yb3dzKHN0YXRlX3N1bW1hcmllcywgdG1wKSAjID8gd2FzIHRoaXMgbWlzc2luZz8KCiAgdG1wcGFyYW1maWxlIDwtIGhlcmU6OmhlcmUoIm91dHB1dC9jdXJyZW50IiwgcGFyYW1fZmlsZXNbaV0pCiAgdG1wcGFyYW1zIDwtIHJlYWRSRFModG1wcGFyYW1maWxlKQogIHRtcF9sb2dsaWsgPC0gZGF0YS5mcmFtZShsb2NhdGlvbiA9IHVuaXF1ZSh0bXAkbG9jYXRpb24pLAogICAgICAgICAgICAgICAgICAgICAgICBsb2dfbGlrID0gdG1wcGFyYW1zWyJMb2dMaWsiLCAyXSkKICBybm1zIDwtIHJvdy5uYW1lcyh0bXBwYXJhbXMpCiAgdG1wcGFyYW1zIDwtIHRtcHBhcmFtcyAlPiUKICAgIG11dGF0ZShwYXJhbWV0ZXIgPSBybm1zKSAlPiUKICAgIGZpbHRlcihpc19maXR0ZWQgPT0gInllcyIpICU+JQogICAgZHBseXI6OnNlbGVjdCgtaXNfZml0dGVkKSAlPiUKICAgIGdhdGhlcigia2V5IiwgInZhbHVlIiwgLXBhcmFtZXRlcikgJT4lCiAgICBmaWx0ZXIoa2V5ID09ICJYMSIpICU+JQogICAgZHBseXI6OnNlbGVjdCgta2V5KSAlPiUKICAgIG11dGF0ZShsb2NhdGlvbiA9IHVuaXF1ZSh0bXAkbG9jYXRpb24pKSAlPiUKICAgIGRwbHlyOjpzZWxlY3QobG9jYXRpb24sIHZhbHVlLCBwYXJhbWV0ZXIpCiAgCiAgc3RhdGVfcGFyYW1ldGVycyA8LSBiaW5kX3Jvd3Moc3RhdGVfcGFyYW1ldGVycywgdG1wcGFyYW1zKQogIHN0YXRlX2xvZ2xpa3MgPC0gYmluZF9yb3dzKHN0YXRlX2xvZ2xpa3MsIHRtcF9sb2dsaWspCn0KCiMgRml4ZWQgcGFyYW1ldGVycyB0YWJsZQpiZXRhc19uYW1lcyA8LSBybm1zW2dyZXAoImJbMC05XSsiLCBybm1zKV0gIyBmaW5kIHBhcmFtZXRlcnMgc3RhcnRpbmcgd2l0aCBiIGZvbGxvd2VkIGJ5IGFueSBudW1iZXIKc3BsaW5lX2NvZWZmaWNpZW50cyA8LSBwYXN0ZSgiU3BsaW5lIGNvZWZmaWNpZW50IiwgZ3N1YigiYiIsIiIsIGJldGFzX25hbWVzKSkKbmFtZXMoc3BsaW5lX2NvZWZmaWNpZW50cykgPC0gYmV0YXNfbmFtZXMKCnBhcmFtc192ZWMgPC0gYyhNSUZfSUQgPSAiTUlGIGlkIiwgCiAgICAgICAgICAgICAgICBMb2dMaWsgPSAiTG9nIExpa2VsaWhvb2QiLCAKICAgICAgICAgICAgICAgIExvZ0xpa19TRSA9ICJTRSBvZiBMb2cgTGlrZWxpaG9vZCIsIAogICAgICAgICAgICAgICAgYmV0YV9zID0gIlRyYW5zbWlzc2lvbiByYXRlIiwKICAgICAgICAgICAgICAgICMgUmVsYXRpdmUgVHJhbnNtaXNzaWJpbGl0eQogICAgICAgICAgICAgICAgZnJhY190cmFuc19lID0gIlJlbGF0aXZlIHRyYW5zbWlzc2liaWxpdHkgb2YgbGF0ZW50IGluZmVjdGlvbnMiLAogICAgICAgICAgICAgICAgZnJhY190cmFuc19hID0gIlJlbGF0aXZlIHRyYW5zbWlzc2liaWxpdHkgb2YgYXN5bXB0b21hdGljIGluZGl2aWR1YWxzIiwKICAgICAgICAgICAgICAgIGZyYWNfdHJhbnNfYyA9ICJSZWxhdGl2ZSB0cmFuc21pc3NpYmlsaXR5IG9mIGRldGVjdGVkIHN5bXB0b21hdGljIGluZGl2aWR1YWxzIHBvc3QtcmVwb3J0aW5nIiwKICAgICAgICAgICAgICAgIGZyYWNfdHJhbnNfaCA9ICJSZWxhdGl2ZSB0cmFuc21pc3NpYmlsaXR5IG9mIGhvc3BpdGFsaXplZCBpbmRpdmlkdWFscyIsCiAgICAgICAgICAgICAgICAjIFRpbWUgaW4gY29tcGFydG1lbnRzCiAgICAgICAgICAgICAgICB0aW1lX2UgPSAiVGltZSBzcGVudCBpbiBsYXRlbnQgY29tcGFydG1lbnRzIChkYXlzKSIsCiAgICAgICAgICAgICAgICB0aW1lX2EgPSAiVGltZSBzcGVudCBpbiBhc3ltcHRvbWF0aWMgY29tcGFydG1lbnRzIChkYXlzKSIsCiAgICAgICAgICAgICAgICB0aW1lX3N1ID0gIlRpbWUgc3BlbnQgaW4gc3ltcHRvbWF0aWMsIHVuZGV0ZWN0ZWQgY29tcGFydG1lbnRzIChkYXlzKSIsCiAgICAgICAgICAgICAgICB0aW1lX3NkID0gIlRpbWUgc3BlbnQgaW4gc3ltcHRvbWF0aWMsIGRldGVjdGVkIGNvbXBhcnRtZW50cyAoZGF5cykiLAogICAgICAgICAgICAgICAgdGltZV9jID0gIlRpbWUgc3BlbnQgaW4gZGlhZ25vc2VkIGNhc2VzIGNvbXBhcnRtZW50cyAoZGF5cykiLAogICAgICAgICAgICAgICAgdGltZV9oID0gIlRpbWUgc3BlbnQgaW4gaG9zcGl0YWxpemVkIGNvbXBhcnRtZW50cyAoZGF5cykiLAogICAgICAgICAgICAgICAgIyBEZXRlY3Rpb24gdGltZQogICAgICAgICAgICAgICAgbWF4X2RpYWdfZmFjdG9yID0gIk1heGltdW0gZm9yIGZhY3RvciBieSB3aGljaCBtb3ZlbWVudCB0aHJvdWdoIElzZCBoYXBwZW5zIGZhc3RlciAocXVpY2tlciBkaWFnbm9zaXMpIiwKICAgICAgICAgICAgICAgIGRpYWdfcmFtcHVwID0gIlJhdGUgYXQgd2hpY2ggZmFzdGVyIGRpYWdub3NpcyByYW1wcyB1cCB0byBtYXgiLAogICAgICAgICAgICAgICAgdF9oYWxmX2RpYWcgPSAiVGltZSBhdCB3aGljaCBkaWFnbm9zaXMgaXMgYXQgNTAlIG9mIG1heCAoaW4gZGF5cyBzaW5jZSB0ID0gMSkiLAogICAgICAgICAgICAgICAgIyBEZXRlY3Rpb24gZnJhY3Rpb24KICAgICAgICAgICAgICAgIG1heF9kZXRlY3RfZnJhYyA9ICJNYXhpbXVtIGZyYWN0aW9uIG9mIGNhc2VzIHRoYXQgYXJlIGRldGVjdGVkIiwKICAgICAgICAgICAgICAgIGRldGVjdF9yYW1wdXAgPSAiU3BlZWQgYXQgd2hpY2ggZnJhY3Rpb24gZGV0ZWN0ZWQgcmFtcHMgdXAiLAogICAgICAgICAgICAgICAgdF9oYWxmX2RldGVjdCA9ICJUaW1lIGF0IHdoaWNoIGluZmVjdGlvbiBkZXRlY3Rpb24gZnJhY3Rpb24gaXMgYXQgNTAlIG9mIG1heCAoaW4gZGF5cyBzaW5jZSB0ID0gMSkiLAogICAgICAgICAgICAgICAgYmFzZV9kZXRlY3RfZnJhYyA9ICJNaW5pbXVtIGZyYWN0aW9uIGRldGVjdGVkIGF0IHQgPSAxIiwKICAgICAgICAgICAgICAgICMgRnJhY3Rpb24gYXN5bXB0b21hdGljCiAgICAgICAgICAgICAgICBmcmFjX2FzeW0gPSAiRnJhY3Rpb24gb2YgbGF0ZW50IGluZmVjdGlvbnMgdGhhdCBtb3ZlIHRvIGFzeW1wdG9tYXRpYyIsCiAgICAgICAgICAgICAgICAjIEZyYWN0aW9uIGhvc3B0aWxpemVkCiAgICAgICAgICAgICAgICBmcmFjX2hvc3AgPSAiRnJhY3Rpb24gb2YgZGV0ZWN0ZWQgY2FzZXMgdGhhdCBhcmUgaG9zcGl0YWxpemVkIiwKICAgICAgICAgICAgICAgICMgRnJhY3Rpb24gb2YgaG9zcGl0YWxpemF0aW9ucyB0aGF0IHJlc3VsdCBpbiBkZWF0aAogICAgICAgICAgICAgICAgbWluX2ZyYWNfZGVhZCA9ICJNYXhpbXVtIGZyYWN0aW9uIG9mIGhvc3BpdGFsaXphdGlvbnMgdGhhdCByZXN1bHQgaW4gZGVhdGgiLAogICAgICAgICAgICAgICAgbWF4X2ZyYWNfZGVhZCA9ICJNYXhpbXVtIGZyYWN0aW9uIG9mIGhvc3BpdGFsaXphdGlvbnMgdGhhdCByZXN1bHQgaW4gZGVhdGgiLAogICAgICAgICAgICAgICAgbG9nX2hhbGZfZGVhZCA9ICJUaW1lIGF0IHdoaWNoIGRlYXRoIGZyYWN0aW9uIGlzIGF0IDUwJSBvZiBtYXggKGluIGRheXMgc2luY2UgdCA9IDEpIiwKICAgICAgICAgICAgICAgICMgRGlzcGVyc2lvbiBwYXJhbWV0ZXJzCiAgICAgICAgICAgICAgICB0aGV0YV9jYXNlcyA9ICJEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgY2FzZSByZXBvcnRpbmcgb2JzZXJ2YXRpb24gcHJvY2VzcyIsCiAgICAgICAgICAgICAgICB0aGV0YV9ob3NwcyA9ICJEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgaG9zcGl0YWxpemF0aW9uIHJlcG9ydGluZyBvYnNlcnZhdGlvbiBwcm9jZXNzIiwKICAgICAgICAgICAgICAgIHRoZXRhX2RlYXRocyA9ICJEaXNwZXJzaW9uIHBhcmFtZXRlciBmb3IgZGVhdGggcmVwb3J0aW5nIG9ic2VyY2F0aW9uIHByb2Nlc3MiLAogICAgICAgICAgICAgICAgc2lnbWFfZHcgPSAiVmFyaWFuY2Ugb2YgdGhlIHN0b2NoYXN0aWNzIHByb2Nlc3Mgbm9pc2UiLAogICAgICAgICAgICAgICAgIyBTcGxpbmUgY29lZmZpY2llbnRzCiAgICAgICAgICAgICAgICBzcGxpbmVfY29lZmZpY2llbnRzLAogICAgICAgICAgICAgICAgIyBJbml0aWFsIGNvbmRpdGlvbnMKICAgICAgICAgICAgICAgIFNfMCA9ICJJbml0aWFsIG51bWJlciBvZiBzdXNjZXB0aWJsZSBpbmRpdmlkdWFscyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBFMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIGxhdGVudCBpbmZlY3Rpb3VzIGluZGl2aWR1YWxzIG9uIHQgPSAxIiwKICAgICAgICAgICAgICAgIElhMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIGFzeW1wdG9tYXRpYyBpbmRpdmlkdWFscyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBJc3UxXzAgPSAiSW5pdGlhbCBudW1iZXIgb2Ygc3ltcHRvbWF0aWMsIHVuZGV0ZWN0ZWQgaW5kaXZpZHVhbHMgb24gdCA9IDEiLAogICAgICAgICAgICAgICAgSXNkMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIHN5bXB0b21hdGljLCBkZXRlY3RlZCBpbmRpdmlkdWFscyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBDMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIGRpYWdub3NlZCBjYXNlcyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBIMV8wID0gIkluaXRpYWwgbnVtYmVyIG9mIGhvc3BpdGFsaXplZCBjYXNlcyBvbiB0ID0gMSIsCiAgICAgICAgICAgICAgICBSXzAgPSAiSW5pdGlhbCBudW1iZXIgb2YgcmVjb3ZlcmVkIGluZGl2aWR1YWxzIG9uIHQgPSAxIiwKICAgICAgICAgICAgICAgIERfMCA9ICJJbml0aWFsIG51bWJlciBvZiBkZWF0aHMgYWZ0ZXIgaG9zcGl0YWxpemF0aW9uIG9uIHQgPSAxIiwKICAgICAgICAgICAgICAgIHRyZW5kX3N0YXJ0ID0gIlRyZW5kIikKCnRtcHBhcmFtcyA8LSByZWFkUkRTKHRtcHBhcmFtZmlsZSkKcm5tcyA8LSByb3cubmFtZXModG1wcGFyYW1zKQpwYXJhbXNfbWFwIDwtIHRpYmJsZShQYXJhbWV0ZXIgPSBuYW1lcyhwYXJhbXNfdmVjKSwKICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gPSBwYXJhbXNfdmVjKQpmaXhlZF9wYXJhbWV0ZXJzIDwtIHRtcHBhcmFtcyAlPiUKICBtdXRhdGUoUGFyYW1ldGVyID0gcm5tcykgJT4lCiAgZmlsdGVyKGlzX2ZpdHRlZCA9PSAibm8iKSAlPiUKICBkcGx5cjo6c2VsZWN0KC1pc19maXR0ZWQpICU+JQogIGdhdGhlcigia2V5IiwgInZhbHVlIiwgLVBhcmFtZXRlcikgJT4lCiAgZmlsdGVyKGtleSA9PSAiWDEiKSAlPiUKICBsZWZ0X2pvaW4ocGFyYW1zX21hcCwgYnkgPSAiUGFyYW1ldGVyIikgJT4lCiAgZmlsdGVyKCFQYXJhbWV0ZXIgJWluJSBjKCJNSUZfSUQiLCAiTG9nTGlrIiwgIkxvZ0xpa19TRSIsICJ0cmVuZF9zdGFydCIsICJ0aGV0YV9ob3NwcyIsICJTXzAiKSkgJT4lCiAgZHBseXI6OnNlbGVjdChQYXJhbWV0ZXIsIERlc2NyaXB0aW9uLCB2YWx1ZSkgJT4lCiAgbXV0YXRlKFBhcmFtZXRlciA9IGlmZWxzZShQYXJhbWV0ZXIgPT0gIkUxXzAiLCAiTDFfMCIsIFBhcmFtZXRlcikpCgpmdXR1cmUgPC0gc3RhdGVfc3VtbWFyaWVzICU+JSBmaWx0ZXIocGVyaW9kID09ICJGdXR1cmUiKSAlPiUgcHVsbChkYXRlKSAlPiUgcmFuZ2UoKQpidXJuaW4gPC0gYyhzdGF0ZV9zdW1tYXJpZXMgJT4lIHB1bGwoZGF0ZSkgJT4lIG1pbigpLCBhcy5EYXRlKCIyMDIwLTAzLTAxIikpCnNhbXBsZV9wZXJpb2QgPC0gYyhhcy5EYXRlKCIyMDIwLTAzLTAxIiksYXMuRGF0ZSgiMjAyMC0xMi0zMSIpKQoKCmBgYAoKIyBNb2JpbGl0eSwgTGF0ZW50IFRyZW5kIGFuZCBPbWVnYSBmb3IgYWxsIHN0YXRlcwoKYSkgTW9iaWxpdHkgdHJlbmQgZm9yIGFsbCBzdGF0ZXMgKCRccGhpJCkuIENvdmFyaWF0ZSB0aGF0IGRlc2NyaWJlcyBodW1hbiBtb2JpbGl0eS4gVGhlc2UgZGF0YSBjb21lIGZyb20gPGEgaHJlZj0iaHR0cHM6Ly93d3cudW5hY2FzdC5jb20vIiB0YXJnZXQ9Il9ibGFuayI+VW5hY2FzdDwvYT4uIFdlIHNtb290aCB0aGUgcmF3IGRhdGEgZnJvbSBVbmFjYXN0IHVzaW5nIGEgc3BsaW5lIGZpdCwgcmVzdWx0aW5nIGluIHRoZSB0cmFqZWN0b3JpZXMgb2YgaHVtYW4gbW92ZW1lbnQgc2hvd24gYmVsb3cuIFRoaXMgY292YXJpYXRlIGlzIHVzZWQgdG8gcmVkdWNlIGJhc2VsaW5lIHRyYW5zbWlzc2lvbi4gSGVyZSB3ZSBzaG93IHRoZSBtb2JpbGl0eSB0cmVuZHMgZnJvbSBhbGwgNTAgc3RhdGVzLiBiKSBsYXRlbnQgdHJlbmQgZm9yIGFsbCBzdGF0ZXMgKCRccHNpJCkuIGMpIFJlbGF0aXZpZSB0cmFuc21pc3NpYmlsaXR5ICgkXG9tZWdhJCkgZm9yIGFsbCBzdGF0ZXMuIEluIGVhY2ggc3VicGxvdCwgdGhlIHJlYWQgbGluZSBpcyBhIG5vbi13ZWlnaHRlZCBtZWFuIG9mIGFsbCBzdGF0ZXMuCgpgYGB7ciBjb3ZhcmlhdGUsIGZpZy5oZWlnaHQ9MywgZmlnLndpZHRoPTcsIGV2YWwgPSBUUlVFfQphbGxfcGhpIDwtIHN0YXRlX3N1bW1hcmllcyAlPiUKICBmaWx0ZXIodmFyaWFibGUgPT0gIm1vYmlsaXR5X3RyZW5kIikgJT4lCiAgZHBseXI6OnNlbGVjdChsb2NhdGlvbiwgZGF0ZSwgbWVhbl92YWx1ZSkgJT4lCiAgcmVuYW1lKHBoaSA9IG1lYW5fdmFsdWUpICU+JSAKICBmaWx0ZXIoZGF0ZSA8PSBTeXMuRGF0ZSgpKQoKbWVhbl9waGkgPC0gYWxsX3BoaSAlPiUgZ3JvdXBfYnkoZGF0ZSkgJT4lIHN1bW1hcmlzZShwaGkgPSBtZWFuKHBoaSkpCgpnX3BoaSA8LSBnZ3Bsb3QoYWxsX3BoaSwgYWVzKHggPSBkYXRlLCB5ID0gcGhpLCBjb2xvciA9IGxvY2F0aW9uKSkgKwogIGdlb21fbGluZShzaXplID0gMC41KSArCiAgIyB5bGFiKCJIdW1hbiBtb3ZlbWVudFxuKCUgb2Ygbm9ybWFsKSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDEpLCBsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2Qob3B0aW9uID0gIkQiLCBkaXJlY3Rpb24gPSAtMSwgYWxwaGEgPSAuNiwgZW5kID0gLjc1KSArCiAgIyB0aGVtZV9kYXJrKGJhc2VfbGluZV9zaXplID0gMC41KSArCiAgZ2VvbV9saW5lKGRhdGEgPSBtZWFuX3BoaSwgYWxwaGEgPSAuNiwgc2l6ZSA9IDIsIGNvbG9yID0gJ3JlZCcsIG5hbWU9Ik1lYW4gb2YgYWxsIHN0YXRlcyIpICsKICAjIGdlb21fcmVjdChhZXMoeG1pbj1mdXR1cmVbMV0sIHhtYXg9ZnV0dXJlWzJdLCB5bWluPTAsIHltYXg9MSkpICsKICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSBmdXR1cmVbMV0sIHhtYXggPSBmdXR1cmVbMl0sIHltaW4gPSAwLCB5bWF4ID0gMSwgYWxwaGEgPSAuMikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ3VpZGVzKGNvbG9yID0gRkFMU0UpCgpwX3BoaSA8LSBnX3BoaSAlPiUgcGxvdGx5OjpnZ3Bsb3RseSgpICU+JSAKICBwbG90bHk6OmxheW91dChzaG93bGVnZW5kID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgIyBtYXJnaW4gPSBsaXN0KGwgPSAxNTApLAogICAgICAgICAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJQaGkiKQogICAgICAgICAgICAgICAgICkKIyBwX3BoaQpgYGAKCgpgYGB7cn0KYWxsX3BzaSA8LSBzdGF0ZV9zdW1tYXJpZXMgJT4lCiAgZmlsdGVyKHZhcmlhYmxlID09ICJsYXRlbnRfdHJlbmQiKSAlPiUKICBkcGx5cjo6c2VsZWN0KGxvY2F0aW9uLCBkYXRlLCBtZWFuX3ZhbHVlKSAlPiUKICByZW5hbWUocHNpID0gbWVhbl92YWx1ZSkgJT4lIAogIGZpbHRlcihkYXRlIDw9IFN5cy5EYXRlKCkpCgptZWFuX3BzaSA8LSBhbGxfcHNpICU+JSBncm91cF9ieShkYXRlKSAlPiUgc3VtbWFyaXNlKHBzaSA9IG1lYW4ocHNpKSkKCmdfcHNpIDwtIGdncGxvdChhbGxfcHNpLCBhZXMoeCA9IGRhdGUsIHkgPSBwc2ksIGNvbG9yID0gbG9jYXRpb24pKSArCiAgZ2VvbV9saW5lKHNpemUgPSAwLjUpICsKICAjIHlsYWIoIkxhdGVudCB0cmVuZFxuKCUgb2Ygbm9ybWFsKSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLDEpLCBsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2Qob3B0aW9uID0gIkQiLCBkaXJlY3Rpb24gPSAtMSwgYWxwaGEgPSAuNiwgZW5kID0gLjc1KSArCiAgIyB0aGVtZV9kYXJrKGJhc2VfbGluZV9zaXplID0gMC41KSArCiAgZ2VvbV9saW5lKGRhdGEgPSBtZWFuX3BzaSwgYWxwaGEgPSAuNiwgc2l6ZSA9IDIsIGNvbG9yID0gJ3JlZCcsIG5hbWU9Ik1lYW4gb2YgYWxsIHN0YXRlcyIpICsKICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSBmdXR1cmVbMV0sIHhtYXggPSBmdXR1cmVbMl0sIHltaW4gPSAwLCB5bWF4ID0gMSwgYWxwaGEgPSAuMikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ3VpZGVzKGNvbG9yID0gRkFMU0UpCgpwX3BzaSA8LSBnX3BzaSAlPiUgcGxvdGx5OjpnZ3Bsb3RseSgpICU+JSAKICBwbG90bHk6OmxheW91dChzaG93bGVnZW5kID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgIyBtYXJnaW4gPSBsaXN0KGwgPSAxNTApLAogICAgICAgICAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJQc2kiKQogICAgICAgICAgICAgICAgICkKIyBwX3BzaQpgYGAKCgpgYGB7cn0KYWxsX29tZWdhIDwtIHN0YXRlX3N1bW1hcmllcyAlPiUKICBmaWx0ZXIodmFyaWFibGUgPT0gIm9tZWdhIikgJT4lCiAgZHBseXI6OnNlbGVjdChsb2NhdGlvbiwgZGF0ZSwgbWVhbl92YWx1ZSkgJT4lCiAgcmVuYW1lKG9tZWdhID0gbWVhbl92YWx1ZSkgJT4lIAogIGZpbHRlcihkYXRlIDw9IFN5cy5EYXRlKCkpCgptZWFuX29tZWdhIDwtIGFsbF9vbWVnYSAlPiUgZ3JvdXBfYnkoZGF0ZSkgJT4lIHN1bW1hcmlzZShvbWVnYSA9IG1lYW4ob21lZ2EpKQoKZ19vbWVnYSA8LSBnZ3Bsb3QoYWxsX29tZWdhLCBhZXMoeCA9IGRhdGUsIHkgPSBvbWVnYSwgY29sb3IgPSBsb2NhdGlvbikpICsKICBnZW9tX2xpbmUoc2l6ZSA9IDAuNSkgKwogICMgeWxhYigiTGF0ZW50IHRyZW5kXG4oJSBvZiBub3JtYWwpIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsMSksIGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfZChvcHRpb24gPSAiRCIsIGRpcmVjdGlvbiA9IC0xLCBhbHBoYSA9IC42LCBlbmQgPSAuNzUpICsKICAjIHRoZW1lX2RhcmsoYmFzZV9saW5lX3NpemUgPSAwLjUpICsKICBnZW9tX2xpbmUoZGF0YSA9IG1lYW5fb21lZ2EsIGFscGhhID0gLjYsIHNpemUgPSAyLCBjb2xvciA9ICdyZWQnLCBuYW1lPSJNZWFuIG9mIGFsbCBzdGF0ZXMiKSArCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gZnV0dXJlWzFdLCB4bWF4ID0gZnV0dXJlWzJdLCB5bWluID0gMCwgeW1heCA9IDEsIGFscGhhID0gLjIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGd1aWRlcyhjb2xvciA9IEZBTFNFKQoKcF9vbWVnYSA8LSBnX29tZWdhICU+JSBwbG90bHk6OmdncGxvdGx5KCkgJT4lIAogIHBsb3RseTo6bGF5b3V0KHNob3dsZWdlbmQgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAjIG1hcmdpbiA9IGxpc3QobCA9IDE1MCksCiAgICAgICAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk9tZWdhIikKICAgICAgICAgICAgICAgICApCiMgcF9vbWVnYQpgYGAKCmBgYHtyfQpwbG90bHk6OnN1YnBsb3QocF9waGksIHBfcHNpLCBwX29tZWdhLCBucm93cyA9IDMsIHNoYXJlWCA9IFRSVUUsIHRpdGxlWSA9IFRSVUUpCmBgYAoKIyBDb3JyZWxhdGlvbiBiZXR3ZWVuIE9tZWdhIGFuZCBQcmV2YWxlbmNlCgpTYW1wbGUgcGVyaW9kID0gTWFyY2ggMSwgMjAyMCB0aHJvdWdoIERlY2VtYmVyIDMxLCAyMDIxCgphKSBwcmVkaWN0b3IgPSBvbWVnYSh0KTsgcmVzcG9uc2UgPSBkYWlseSBwcmV2YWxlbmNlKHQpCgpgYGB7cn0KCmFsbF9wcmV2YWxlbmNlIDwtIHN0YXRlX3N1bW1hcmllcyAlPiUKICBmaWx0ZXIocGVyaW9kID09ICJQYXN0IikgJT4lCiAgZmlsdGVyKGJldHdlZW4oZGF0ZSwgc2FtcGxlX3BlcmlvZFsxXSwgc2FtcGxlX3BlcmlvZFsyXSkpICU+JSAKICBmaWx0ZXIodmFyaWFibGUgPT0gInByZXZhbGVuY2UiKSAlPiUKICBkcGx5cjo6c2VsZWN0KGxvY2F0aW9uLCBkYXRlLCBtZWFuX3ZhbHVlKSAlPiUKICByZW5hbWUocHJldmFsZW5jZSA9IG1lYW5fdmFsdWUpICU+JSAKICBmaWx0ZXIoZGF0ZSA8PSBTeXMuRGF0ZSgpKQoKbWVhbl9hbGxfcHJldmFsZW5jZSA8LSBhbGxfcHJldmFsZW5jZSAlPiUgZ3JvdXBfYnkoZGF0ZSkgJT4lIHN1bW1hcmlzZShwcmV2YWxlbmNlID0gbWVhbihwcmV2YWxlbmNlKSkKIyBwbG90KHggPSBtZWFuX29tZWdhJG1lYW5fdmFsdWUsIHkgPSBtZWFuX2FsbF9wcmV2YWxlbmNlJHByZXZhbGVuY2UpCgptZWFucyA8LSBtZWFuX3BoaSAlPiUgCiAgZnVsbF9qb2luKG1lYW5fcHNpKSAlPiUgCiAgZnVsbF9qb2luKG1lYW5fb21lZ2EpICU+JSAKICBmdWxsX2pvaW4obWVhbl9hbGxfcHJldmFsZW5jZSkKCnN0YXRlX3N1bW1hcmllc193aWRlIDwtIHN0YXRlX3N1bW1hcmllcyAlPiUKICBmaWx0ZXIocGVyaW9kID09ICJQYXN0IikgJT4lCiAgZmlsdGVyKGJldHdlZW4oZGF0ZSwgc2FtcGxlX3BlcmlvZFsxXSwgc2FtcGxlX3BlcmlvZFsyXSkpICU+JSAKICBmaWx0ZXIoc2ltX3R5cGUgPT0gJ3N0YXR1c19xdW8nKSAlPiUgCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IHZhcmlhYmxlLCB2YWx1ZXNfZnJvbSA9IG1lYW5fdmFsdWUpICU+JSAKICBncm91cF9ieShsb2NhdGlvbikgJT4lIAogIG11dGF0ZShBVV9vbWVnYSA9IGN1bXN1bShvbWVnYSkpCgpDQSA8LSBzdGF0ZV9zdW1tYXJpZXNfd2lkZSAlPiUgZmlsdGVyKGxvY2F0aW9uID09ICJDYWxpZm9ybmlhIikKCmxhZ2ZpbGwgPC0gZnVuY3Rpb24oeCwgbGFnLGZpbGw9MSkgewogIHJlcGxhY2VfbmEobGFnKHgsbGFnKSxmaWxsKQp9CgpDQSAlPiUgCiAgcGxvdGx5OjpwbG90X2x5KHR5cGUgPSAnc2NhdHRlcicsIG1vZGUgPSAnbWFya2VycycsCiAgICAgICAgICAgICAgICB4ID0gfmxhZ2ZpbGwob21lZ2EsMCksIHkgPSB+cHJldmFsZW5jZSwgCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIAogICAgICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnPC9icj4gT21lZ2E6ICcsIG9tZWdhLCAnPC9icj4gcHJldmFsZW5jZTogJywgcHJldmFsZW5jZSwgJzwvYnI+IERhdGU6ICcsIGRhdGUpKSAlPiUgCiAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiQ2FsaWZvcm5pYSIseGF4aXM9bGlzdCh0aXRsZT0ib21lZ2EiKSx5YXhpcz1saXN0KHRpdGxlPSJwcmV2YWxlbmNlIikpCgpzdGF0ZV9zdW1tYXJpZXNfd2lkZSAlPiUgCiAgcGxvdGx5OjpwbG90X2x5KHR5cGUgPSAnc2NhdHRlcicsIG1vZGUgPSAnbWFya2VycycsCiAgICAgICAgICAgICAgICB4ID0gfmxhZ2ZpbGwob21lZ2EsMCksIHkgPSB+cHJldmFsZW5jZSwgY29sb3IgPSB+bG9jYXRpb24sCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIAogICAgICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnPC9icj4gT21lZ2E6ICcsIG9tZWdhLCAnPC9icj4gcHJldmFsZW5jZTogJywgcHJldmFsZW5jZSwgJzwvYnI+IERhdGU6ICcsIGRhdGUsICc8L2JyPiBTdGF0ZTogJywgbG9jYXRpb24gKSkgJT4lIAogICAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiQWxsIHN0YXRlcyIsIHhheGlzPWxpc3QodGl0bGU9Im9tZWdhIikseWF4aXM9bGlzdCh0aXRsZT0icHJldmFsZW5jZSIpKQoKbWVhbnMgJT4lIGZpbHRlcihkYXRlIDwgZnV0dXJlWzFdKSAlPiUgCiAgcGxvdGx5OjpwbG90X2x5KHR5cGUgPSAnc2NhdHRlcicsIG1vZGUgPSAnbWFya2VycycsCiAgICAgICAgICAgICAgICB4ID0gfm9tZWdhLCB5ID0gfnByZXZhbGVuY2UsICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCAKICAgICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJzwvYnI+IE9tZWdhOiAnLCBvbWVnYSwgJzwvYnI+IHByZXZhbGVuY2U6ICcsIHByZXZhbGVuY2UsICc8L2JyPiBEYXRlOiAnLCBkYXRlICkpICU+JSAKICBwbG90bHk6OmxheW91dCh0aXRsZSA9ICJNZWFuIG9tZWdhLCBtZWFuIHByZXZhbGVuY2UgKGFjcm9zcyBzdGF0ZXMpIix4YXhpcz1saXN0KHRpdGxlPSJvbWVnYSIpLHlheGlzPWxpc3QodGl0bGU9InByZXZhbGVuY2UiKSkKCmBgYAoKLS0tCgpDYWxpZm9ybmlhLCBhbmQgbWVhbiBhY3Jvc3Mgc3RhdGVzLCBhdCB2YXJ5aW5nIGxhZ3MKCmBgYHtyfQpDQSAlPiUgZmlsdGVyKHBlcmlvZCA9PSAnUGFzdCcpICU+JSAKICBmaWx0ZXIoYmV0d2VlbihkYXRlLCBzYW1wbGVfcGVyaW9kWzFdLCBzYW1wbGVfcGVyaW9kWzJdKSkgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5sYWdmaWxsKG9tZWdhLDApLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDAiLAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBPbWVnYTogJywgb21lZ2EsICc8L2JyPiBwcmV2YWxlbmNlOiAnLCBwcmV2YWxlbmNlLCAnPC9icj4gRGF0ZTogJywgZGF0ZSkpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwob21lZ2EsNyksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgNyIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwob21lZ2EsMTQpLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDE0IikgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChvbWVnYSwyMSksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgMjEiKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKG9tZWdhLDI4KSwgeSA9IH5wcmV2YWxlbmNlLCBuYW1lID0gImxhZyAyOCIpICU+JSAKICBwbG90bHk6OmxheW91dCh0aXRsZSA9ICJDYWxpZm9ybmlhLCBvbWVnYSBhdCB2YXJ5aW5nIGxhZ3MiLCB4YXhpcyA9IGxpc3QodGl0bGUgPSAib21lZ2EiKSkKCm1lYW5zICU+JSBmaWx0ZXIoZGF0ZSA8IGZ1dHVyZVsxXSkgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5sYWdmaWxsKG9tZWdhLDApLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDAiLAogICAgICAgICAgICAgICAgaG92ZXJpbmZvID0gJ3RleHQnLCB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBPbWVnYTogJywgb21lZ2EsICc8L2JyPiBwcmV2YWxlbmNlOiAnLCBwcmV2YWxlbmNlLCAnPC9icj4gRGF0ZTogJywgZGF0ZSkpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwob21lZ2EsNyksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgNyIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwob21lZ2EsMTQpLCB5ID0gfnByZXZhbGVuY2UsIG5hbWUgPSAibGFnIDE0IikgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChvbWVnYSwyMSksIHkgPSB+cHJldmFsZW5jZSwgbmFtZSA9ICJsYWcgMjEiKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKG9tZWdhLDI4KSwgeSA9IH5wcmV2YWxlbmNlLCBuYW1lID0gImxhZyAyOCIpICU+JSAKICBwbG90bHk6OmxheW91dCh0aXRsZSA9ICJNZWFuIG9tZWdhLCBtZWFuIHByZXZhbGVuY2UgKGFjcm9zcyBzdGF0ZXMpXG5vbWVnYSBhdCB2YXJ5aW5nIGxhZ3MiLCB4YXhpcyA9IGxpc3QodGl0bGUgPSAib21lZ2EiKSkKCmBgYAoKLS0tCgpiKSBwcmVkaWN0b3IgPSBBVUMgb2Ygb21lZ2Egb3ZlciB0aW1lOyByZXNwb25zZSA9IGN1bXVsYXRpdmUgYWxsIGluZmVjdGlvbnMgb3ZlciB0aW1lCgpgYGB7cn0KCkNBICU+JSBmaWx0ZXIocGVyaW9kID09ICdQYXN0JykgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5sYWdmaWxsKEFVX29tZWdhLDApLCB5ID0gfmN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIG5hbWUgPSAnbGFnIDAnLCAKICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywgCiAgICAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBBcmVhIHVuZGVyIE9tZWdhOiAnLCBBVV9vbWVnYSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2JyPiBDdW11bGF0aXZlIGluZmVjdGlvbnM6ICcsIGN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9icj4gRGF0ZTogJywgZGF0ZSkpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwoQVVfb21lZ2EsNyksIHkgPSB+Y3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywgbmFtZSA9ICJsYWcgNyIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwoQVVfb21lZ2EsMTQpLCB5ID0gfmN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIG5hbWUgPSAibGFnIDE0IikgJT4lIAogIHBsb3RseTo6YWRkX3RyYWNlKHggPSB+bGFnZmlsbChBVV9vbWVnYSwyMSksIHkgPSB+Y3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywgbmFtZSA9ICJsYWcgMjEiKSAlPiUgCiAgcGxvdGx5OjphZGRfdHJhY2UoeCA9IH5sYWdmaWxsKEFVX29tZWdhLDI4KSwgeSA9IH5jdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zLCBuYW1lID0gImxhZyAyOCIpICU+JSAKICBwbG90bHk6OmFkZF90cmFjZSh4ID0gfmxhZ2ZpbGwoQVVfb21lZ2EsNTYpLCB5ID0gfmN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsIG5hbWUgPSAibGFnIDU2IikgJT4lIAogIHBsb3RseTo6bGF5b3V0KHRpdGxlID0gIkNhbGlmb3JuaWEsIGFyZWEgdW5kZXIgb21lZ2EgYXQgdmFyeWluZyBsYWdzIix4YXhpcz1saXN0KHRpdGxlPSJBcmVhIHVuZGVyIG9tZWdhIikseWF4aXM9bGlzdCh0aXRsZT0iQ3VtdWxhdGl2ZSBpbmZlY3Rpb25zIikpCgpzdGF0ZV9zdW1tYXJpZXNfd2lkZSAlPiUgZmlsdGVyKHBlcmlvZCA9PSAnUGFzdCcpICU+JSAKICBmaWx0ZXIoZGF0ZSA+IGJ1cm5pblsyXSkgJT4lCiAgcGxvdGx5OjpwbG90X2x5KHR5cGUgPSAnc2NhdHRlcicsIG1vZGUgPSAnbWFya2VycycsCiAgICAgICAgICAgICAgICB4ID0gfmxhZ2ZpbGwoQVVfb21lZ2EsMCksIHkgPSB+Y3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucywgY29sb3IgPSB+bG9jYXRpb24sCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIAogICAgICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnPC9icj4gQXJlYSB1bmRlciBPbWVnYTogJywgQVVfb21lZ2EsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9icj4gQ3VtdWxhdGl2ZSBpbmZlY3Rpb25zOiAnLCBjdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYnI+IERhdGU6ICcsIGRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2JyPiBTdGF0ZTogJywgbG9jYXRpb24pKSAlPiUgCiAgICBwbG90bHk6OmxheW91dCh0aXRsZSA9ICJBbGwgc3RhdGVzIiwgeGF4aXM9bGlzdCh0aXRsZT0iQXJlYSB1bmRlciBvbWVnYSAobGFnIDApIiksIHlheGlzPWxpc3QodGl0bGU9IkN1bXVsYXRpdmUgaW5mZWN0aW9ucyIpKQoKCmBgYAoKLS0tCgpjKSBwcmVkaWN0b3IgPSBBVUMgb2Ygb21lZ2E7IHJlc3BvbnNlID0gY3VtdWxhdGl2ZSBhbGwgaW5mZWN0aW9ucwoKYGBge3J9CiMgc3RhdGVfc3VtbWFyaWVzX3dpZGUgJT4lIAojICAgZmlsdGVyKHBlcmlvZCA9PSAnUGFzdCcpICU+JQojICAgZmlsdGVyKGRhdGUgPiBidXJuaW5bMl0pICU+JQojICAgZ3JvdXBfYnkobG9jYXRpb24pICU+JSAKIyAgIHN1bW1hcmlzZShBVV9vbWVnYSA9IG1heChBVV9vbWVnYSksIGN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMgPSBtYXgoY3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucykpICU+JSAKIyAgIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAojICAgICAgICAgICAgICAgICB4ID0gfkFVX29tZWdhLCB5ID0gfmN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMsCiMgICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywgCiMgICAgICAgICAgICAgICAgIHRleHQgPSB+cGFzdGUoJzwvYnI+IEFyZWEgdW5kZXIgT21lZ2E6ICcsIEFVX29tZWdhLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9icj4gQ3VtdWxhdGl2ZSBpbmZlY3Rpb25zOiAnLCBjdW11bGF0aXZlX2FsbF9pbmZlY3Rpb25zLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9icj4gU3RhdGU6ICcsIGxvY2F0aW9uKSkgJT4lIAojICAgICBwbG90bHk6OmxheW91dCh0aXRsZSA9ICJDb3JyZWxhdGlvbiBvZiBjdW11bGF0aXZlIGluZmVjdGlvbiB3aXRoIEFyZWEgdW5kZXIgb21lZ2EiLCB4YXhpcz1saXN0KHRpdGxlPSJBcmVhIHVuZGVyIG9tZWdhIiksIHlheGlzPWxpc3QodGl0bGU9IkN1bXVsYXRpdmUgaW5mZWN0aW9ucyIpKQoKc3RhdGVfc3VtbWFyaWVzX3dpZGUgJT4lIAogIGZpbHRlcihwZXJpb2QgPT0gJ1Bhc3QnKSAlPiUKIyAgZmlsdGVyKGRhdGUgPiBidXJuaW5bMl0pICU+JQogIGZpbHRlcihkYXRlID49IHNhbXBsZV9wZXJpb2RbMV0gJiBkYXRhIDw9IHNhbXBsZV9wZXJpb2RbMl0pICU+JSAKICBncm91cF9ieShsb2NhdGlvbikgJT4lIAogIHN1bW1hcmlzZShBVV9vbWVnYSA9IG1heChBVV9vbWVnYSksIGN1bXVsYXRpdmVfYWxsX2luZmVjdGlvbnMgPSBtYXgoY3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucykpICU+JSAKICBnZ3N0YXRzcGxvdDo6Z2dzY2F0dGVyc3RhdHMoeCA9ICJBVV9vbWVnYSIsIHkgPSAiY3VtdWxhdGl2ZV9hbGxfaW5mZWN0aW9ucyIsIHR5cGUgPSAic3BlYXJtYW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAiQ29ycmVsYXRpb24gb2YgY3VtdWxhdGl2ZSBpbmZlY3Rpb25zIHdpdGggQXJlYSB1bmRlciBvbWVnYSIpCgpgYGAKCi0tLQoKZSkgbWFwIG9mIHNhbWUgKGNvcnJlbGF0aW9uLCBieSBzdGF0ZSkKClRvIGJlIG1hZGUKCiMgQ29ycmVsYXRpb24gYmV0d2VlbiBNb2JpbGl0eSBhbmQgT21lZ2EKCmBgYHtyfQoKQ0EgJT4lIAogIHBsb3RseTo6cGxvdF9seSh0eXBlID0gJ3NjYXR0ZXInLCBtb2RlID0gJ21hcmtlcnMnLAogICAgICAgICAgICAgICAgeCA9IH5tb2JpbGl0eV90cmVuZCwgeSA9IH5vbWVnYSwgCiAgICAgICAgICAgICAgICBob3ZlcmluZm8gPSAndGV4dCcsIAogICAgICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnPC9icj4gTW9iaWxpdHk6ICcsIG1vYmlsaXR5X3RyZW5kLCAnPC9icj4gb21lZ2E6ICcsIG9tZWdhLCAnPC9icj4gRGF0ZTogJywgZGF0ZSkpICU+JSAKICBwbG90bHk6OmxheW91dCh0aXRsZSA9ICJDYWxpZm9ybmlhIix4YXhpcz1saXN0KHRpdGxlPSJtb2JpbGl0eSB0cmVuZCIpLHlheGlzPWxpc3QodGl0bGU9Im9tZWdhIikpCgpDQSAlPiUgdW5ncm91cCgpICU+JSBmaWx0ZXIoZGF0ZSA8IGZ1dHVyZVsxXSkgJT4lIAogIGZpbHRlcihkYXRlID4gYnVybmluWzJdKSAlPiUKICBzZWxlY3QoZGF0ZSxtb2JpbGl0eV90cmVuZCxvbWVnYSkgJT4lIAogIGdnc3RhdHNwbG90OjpnZ3NjYXR0ZXJzdGF0cyh4ID0gIm1vYmlsaXR5X3RyZW5kIiwgeSA9ICJvbWVnYSIsIHR5cGUgPSAic3BlYXJtYW4iLCB0aXRsZSA9ICJDYWxpZm9ybmlhIikKCgpzdGF0ZV9zdW1tYXJpZXNfd2lkZSAlPiUgCiAgcGxvdGx5OjpwbG90X2x5KHR5cGUgPSAnc2NhdHRlcicsIG1vZGUgPSAnbWFya2VycycsCiAgICAgICAgICAgICAgICB4ID0gfm1vYmlsaXR5X3RyZW5kLCB5ID0gfm9tZWdhLCBjb2xvciA9IH5sb2NhdGlvbiwKICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywgCiAgICAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBNb2JpbGl0eTogJywgbW9iaWxpdHlfdHJlbmQsICc8L2JyPiBvbWVnYTogJywgb21lZ2EsICc8L2JyPiBEYXRlOiAnLCBkYXRlLCAnPC9icj4gU3RhdGU6ICcsIGxvY2F0aW9uICkpICU+JQogICAgcGxvdGx5OjpsYXlvdXQodGl0bGUgPSAiQWxsIHN0YXRlcyIsIHhheGlzPWxpc3QodGl0bGU9Im1vYmlsaXR5IHRyZW5kIikseWF4aXM9bGlzdCh0aXRsZT0ib21lZ2EiKSkKCm1lYW5zICU+JSAKICBmaWx0ZXIoZGF0ZSA8IGZ1dHVyZVsxXSkgJT4lIAogIGZpbHRlcihkYXRlID4gYXMuRGF0ZSgiMjAyMC0wMi0yNSIpKSAlPiUgIyBGZWIgMjYgaXMgdGhlIGZpcnN0IGRheSB3aXRoIGFueSBtb2JpbGl0eSA8IDEKICBwbG90bHk6OnBsb3RfbHkodHlwZSA9ICdzY2F0dGVyJywgbW9kZSA9ICdtYXJrZXJzJywKICAgICAgICAgICAgICAgIHggPSB+cGhpLCB5ID0gfm9tZWdhLCAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICd0ZXh0JywgCiAgICAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCc8L2JyPiBNb2JpbGl0eTogJywgcGhpLCAnPC9icj4gb21lZ2E6ICcsIG9tZWdhLCAnPC9icj4gRGF0ZTogJywgZGF0ZSkpICU+JSAKICBwbG90bHk6OmxheW91dCh0aXRsZSA9ICJNZWFuIG1vYmlsaXR5LCBtZWFuIG9tZWdhIChhY3Jvc3Mgc3RhdGVzKSIseGF4aXM9bGlzdCh0aXRsZT0ibW9iaWxpdHkgdHJlbmQiKSx5YXhpcz1saXN0KHRpdGxlPSJvbWVnYSIpKQoKYGBgCgpgYGB7cn0KIyBtZWFucyAlPiUgZmlsdGVyKGRhdGUgPCBmdXR1cmVbMV0pICU+JSAKIyAgIGZpbHRlcihkYXRlID4gYnVybmluWzJdKSAlPiUKIyAgIGdnc2NhdHRlcmhpc3QoeCA9ICJwaGkiLCB5ID0gIm9tZWdhIiwgCiMgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmlsbCA9IE5BLCBzaGFwZSA9IDE5LCBzaXplID0gMywgIyBwb2ludHMKIyAgICAgICAgICAgYWRkID0gInJlZy5saW5lIiwgCiMgICAgICAgICAgIGFkZC5wYXJhbXMgPSBsaXN0KGNvbG9yID0gImJsdWUiLCBmaWxsID0gImxpZ2h0Z3JheSIpLAojICAgICAgICAgICBjb25mLmludCA9IFRSVUUsIAojICAgICAgICAgICBjb3IuY29lZiA9IFRSVUUsIGNvci5tZXRob2QgPSAic3BlYXJtYW4iLAojICAgICAgICAgICB4bGFiID0gIm1vYmlsaXR5IHRyZW5kIiwgeWxhYiA9ICJvbWVnYSIsCiMgICAgICAgICAgIG1hcmdpbi5wbG90ID0gImRlbnNpdHkiLAojICAgICAgICAgICBtYXJnaW4uZ2d0aGVtZSA9IHRoZW1lX3ZvaWQoKSwKIyAgICAgICAgICAgbWFyZ2luLnNwYWNlID0gRkFMU0UsCiMgICAgICAgICAgIG1haW4ucGxvdC5zaXplID0gMiwKIyAgICAgICAgICAgbWFyZ2luLnBsb3Quc2l6ZSA9IDEKIyAgICAgICAgICAgKQoKbWVhbnMgJT4lIGZpbHRlcihkYXRlIDwgZnV0dXJlWzFdKSAlPiUgCiAgZmlsdGVyKGRhdGUgPiBidXJuaW5bMl0pICU+JQogIGdnc3RhdHNwbG90OjpnZ3NjYXR0ZXJzdGF0cyh4ID0gInBoaSIsIHkgPSAib21lZ2EiLCB0eXBlID0gInNwZWFybWFuIiwgdGl0bGUgPSAiTWVhbiBwaGksIE1lYW4gb21lZ2Egb3ZlciBhbGwgc3RhdGVzIikKCgpgYGAKCg==